AWSumeを使ってAWS CLIをIAM Identity Center(SSO)で認証する
みなさん、こんにちは。
明るい笑顔がトレードマーク、ルイボスティーが大好きな芦沢(@ashi_ssan)です。
IAM Identity CenterのSSO認証を使ってローカル環境でAWS CLIを実行したいな〜〜
と思ったこと、誰しもありますよね?
以下ブログのようにSSO認証でAWS CLIを実行する方法はあります。
ただ、この方法だと以下のようなCLIコマンド実行時に--profile YOUR_AWS_ACCOUNT
のように毎回アカウントのプロファイルを指定しなければならず、私は大変手間に感じます。
> aws s3 ls --profile YOUR_AWS_ACCOUNT
SSOを使わない環境では、AWS CLIのスイッチロール時に役に立つ便利なツールAWSumeが有名です。
AWSumeを利用すると、以下のような簡潔なコマンドで任意のアカウントのIAMロールへスイッチでき、以降のコマンド入力でプロファイルの指定が不要になります。
> awsume YOUR_AWS_ACCOUNT
少し前まで知らなかったのですが、何とこのツールSSOで認証するケースにも対応していました。ただ、利用するために多少の工夫が必要が必要だったので、このブログで利用開始までの手順を紹介します。
前提作業
こちらのブログを参考に、通常のSSOしないケースでAWSumeを利用できる状態にしておいてください。
作業の前提となるAWsumeのバージョンはこちらです。
> awsume --version 4.5.3
AWsumeを使ってSSO認証してAWS CLIを実行するためには、後述するcredential_process
というパラメータの取得が必要になります。
ただし、執筆時現在のIAM Identity CenterのAPI(aws sso 〜
など)では取得できないため、何かしらのツールを導入します。
今回はaws-sso-util
というツールを導入します。
まずは、どちらかのコマンドでaws-sso-util
をインストールしてください。
> brew install aws-sso-util > pipx install aws-sso-util
やってみた
AWSumeをSSO認証で利用できるようになる、~/.aws/config
のサンプルは以下です。
[profile test-profile] sso_start_url = https://d-xxxxxxxx.awsapps.com/start sso_region = ap-northeast-1 sso_account_id = 123456789012 sso_role_name = AWSAdministratorAccess credential_process = aws-sso-util credential-process --profile test-profile region = ap-northeast-1 output = json
sso_start_url
には、IAM Identity CenterのログインポータルのURLを入力してください。
sso_region
には、IAM Identity Centerが有効化されているAWSリージョンを指定してください。試しに誤ったリージョンを指定すると途中までうまく行きますがSSOの認証画面でエラーになりました。
sso_account_id
にはスイッチロールする対象のアカウントID、sso_role_name
にはスイッチロールするIAMロールの名称を入力してください。
credential_process
は、記載の通りのコマンドを入力してください。test-profileの箇所は~/.aws/config
のプロファイル名を指定しています。
ここまでで~/.aws/config
の準備ができました。
以下のawsume プロファイル名コマンドを実行してスイッチロールしましょう。
> awsume test-profile
実行すると、以下のようなエラーが出ると思われます。
Awsume error: credential_process error: Login required. Use `aws-sso-util login --profile test-profile` or `aws sso login --profile test-profile` and try again.
このエラーは、2023年10月6日現在credential_process
に記載するコマンドがAWSume内でネイティブに組み込まれないことが原因です。
以下AWSumeのGitHub ISSUEにも上がっています。
現状回避できないようなので、エラー文にあるコマンドを別途手動で入力する必要があります。
コマンドを実行すると以下のような出力があり、同時にAWSのコンソールが開きます。
> aws-sso-util login --profile test-profile Logging in https://d-xxxxxxxx.awsapps.com/start Login with IAM Identity Center required. Attempting to open the authorization page in your default browser. If the browser does not open or you wish to use a different device to authorize this request, open the following URL: https://d-xxxxxxxx.awsapps.com/start Then enter the code: XXXX-XXXX
Confirm and continueをクリックすると、IAM Identity Centerの認証画面になります。ログインしてください。
認証が完了すると、こちらの画面に遷移するのでAllowをクリックします。
以下のように表示されたら認証は成功です。
コマンドラインにも以下の出力があれば、ログインが成功しています。
Login succeeded, valid until YYYY-MM-DD HH:mm JST
AWS CLIを実行すると、設定したIAMロールにスイッチできていることが確認できます。
> aws sts get-caller-identity { "UserId": "AROAQHDUQX34OODF66MB5:ashisan@sample.jp", "Account": "123456789012", "Arn": "arn:aws:sts::123456789012:assumed-role/AWSReservedSSO_AWSAdministratorAccess_xxxxxxxxxxxx/ashisan@sample.jp" }
最後に
以上、AWSumeを使ってAWS CLIをIAM Identity Center(SSO)で認証する方法をご紹介しました。
IAM Identity CenterによるSSOを目的に、OrganizationsやControl Towerを使っている方・使いたい方も少なくないと思っています。
たくさんのアカウントを日々扱っていると、SSOを使っていたとしてもスイッチロールやCLIの実行などに手間がかかると思います。AWSumeによってその手間が少しでも省けるはずです。
私はこのツールがないともうマルチアカウント環境をCLIで触れない体になってしまいました。皆さんも早くこちらの世界に来てください。
以上、芦沢(@ashi_ssan)でした。